package com.jade.bss.ec.order;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;
import com.jade.framework.base.util.Parameters;

/**
 * Created by dwzhang on 16/1/14.
 */
public interface OrderDao
{
    /**
     * 添加订单。
     *
     * @param order 订单对象
     * @throws OrderException 处理异常。
     */
    public void add(ECOrder order)
            throws OrderException;

    /**
     * 更新订单信息。
     *
     * @param order 订单对象
     * @throws OrderException 处理异常。
     */
    public void update(ECOrder order)
            throws OrderException;

    /**
     * 删除订单信息。
     *
     * @param order 订单信息。
     * @throws OrderException 处理异常。
     */
    public void remove(ECOrder order)
            throws OrderException;

    /**
     * 获取订单详情。
     *
     * @param id 订单标识。
     * @return 订单对象
     * @throws OrderException 处理异常。
     */
    public ECOrder get(long id)
            throws OrderException;

    /**
     * 查询客户订单信息。为了cache做的冗余，不影响其他人的订单列表。
     *
     * @param ownerType 订单所有者类型
     * @param ownerId 订单所有者标识
     * @param criteria 查询条件
     * @return 订单列表。
     */
    public PagingList<ECOrder> query(String ownerType, String ownerId, Criteria criteria);

    /**
     * 查询订单信息。
     *
     * @param criteria 订单查询条件
     * @return 订单列表
     */
    public PagingList<ECOrder> query(Criteria criteria);

    /**
     * 更新内容指定的参数。
     *
     * @param order 订单
     * @param params 需要更改的参数
     * @param statuses 记录匹配的状态，仅针对指定的状态进行变更。
     * @return 更新的记录数量
     * @throws OrderException 处理异常。
     */
    public int update(ECOrder order, Parameters params, int[] statuses)
            throws OrderException;
}
